package demo923;

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Scanner;

public class demo2 {
    public static void main(String[] args) throws IOException {


        /*加密文件*/

        while(true){
            Menu();
        }


    }
    //菜单
    public static void Menu() throws IOException {
        Scanner sc=new Scanner(System.in);
        File init=new File("D:\\ccc");
        File fina=new File("D:\\ddd");
        System.out.println("请输入要执行的操作：");
        System.out.println("（加密）1 or 2（解密）or 0(结束操作) ");
        int choose=sc.nextInt();
        switch (choose){
            case 1->AddPassword(init,fina);
            case 2->NoPassword(init,fina);
            case 0->System.exit(0);
            default -> System.out.println("没有该选项！");

        }
    }

    //加密方法
                                  //原始文件   //新文件
    public static void AddPassword(File init,File fina) throws IOException {
        //这里创建新的子文件夹
       if(fina!=null){
           fina.mkdir();
           File[] files=init.listFiles();
           for(File file:files){
               if(file.isFile()){
                   //是文件--对齐内容进行加密--将每个字节进行异或运算--有可能含中文字符
                   FileReader reader=new FileReader(file);
                   FileWriter writer=new FileWriter(new File(fina,file.getName()));//要是不存在这个文件会自动给创建
                   //再把原始文件的内容进行加密--进行异或运算-任意与一个数
                   int len;
                   //一个字节一个字节的获取
                   while((len=reader.read())!=-1){
                       //获取char类型的数据，先进行加密
                       writer.write(len^10);//对10进行异或运算，再读出来
                   }
                   //关闭资源
                   writer.close();
                   reader.close();


               } else{
                   //不是文件--就继续找文件，递归调用
                   AddPassword(file,new File(fina,file.getName()));//这个文件夹，新文件夹中也必须要有

               }

           }
       }

    }
    //解密方法
                                  //原始文件  //加密后的文件
    public static void NoPassword(File init,File fina) throws IOException {
        init.mkdir();
        File[] files=fina.listFiles();
        for(File file: files){
            if(file.isFile()){
                //是文件--进行解密，再将解密的文件内容写到原始文件中
                FileReader reader=new FileReader(fina);
                FileWriter writer=new FileWriter(new File(init,file.getName()));
                int b;
                while((b=reader.read())!=-1){
                    //进行解密，同时把数据写入
                    writer.write(b^10);//再次对同一个数进行异或运算就可以得到原来的数据
                }
                //关闭资源
                writer.close();
                reader.close();

            }else{
                //不是文件--这次不需要新建了
                NoPassword(file,new File(init,file.getName()));

            }
        }



    }

}
